<html>
<head>
<title>POJava</title>
<LINK REL="stylesheet" HREF="/style/pojava.css" TYPE="text/css" MEDIA="screen" />
<body>
<img src="img/pojava7.png">
<h3>What is POJava?</h3>
<p>POJava is a set of very light-weight utility libraries providing a practical assortment of data transformations.
The base jar, POJava, provides simplified functions for string and binary conversions, such as compression,
encryption, and encoding, and tools for date manipulation, reflection, external process invocation, and language 
binding.</p>
<p>A key strength of the POJava library is its handling of dates and times.  Its immutable DateTime object will
quickly parse dates from a string in most languages and formats without having to specify either.  It allows
for system-global definition of the several default behaviors of the DateTime object, including the toString()
format, input and output time zones, MDY vs DMY interpretation of ambiguous formats, and interpretation of two
digit years.  It can perform date math, such as truncating to an hour or subtracting a month.
</p>
<p>The POJava Persistence jar layers additional support for database-to-object (ORM) and object-to-xml
exchanges in both directions.
</p>
<h2>What's new and cool in POJava?</h2>
<p>As of version 3.0.0, POJava has separated DateTime into a separate project and includes it as a dependency.
The DateTimeConfig object was refactored to get rid of all static variables except for the one used as a singleton,
which now returns an instance of IDateTimeConfig, rather than the DateTimeConfig object, so it can be overridden
as needed.  The DateTime object now uses the IDateTimeConfig.systemTime() to fetch the system time, rather than 
System.currentTimeMillis(), so it can be overridden for testing.
</p>
<p>The DateTimeConfig object is immutable, and there is now a mutable DateTimeConfigBuilder object that can be
used to more easily define a custom configuration.  The algorithm for interpreting text-based months has changed,
so the IDateTimeConfig now supports a MonthMap object that maps month names and abbreviations to their respective
calendar month offsets.  This new approach made it easy to add nearly all languages to the default, and support 
custom additions in case there are known abbreviations or languages that are not yet supported.  
</p>
<p>When constructing a DateTime while specifying a Time Zone, the DateTime object will no longer clone the
default config, but will wrap it in a LocalConfig object that overrides only what is needed.  This reduces
garbage collection and complexity.
</p>
<h2>Generated Documentation</h2>
<table>
<tr>
<td><a href="/site/pojava-3.0.0/">POJava 3.0.0</a> <a href="/site/pojava-3.0.0/apidocs/">JavaDocs</a></td>
<td>POJava provides utilities for managing data using simple POJOs (Plain Old Java Objects).</td>
</tr>
<tr>
<td><a href="/site/pojava-datetime-3.0.0/">POJava DateTime 3.0.0</a> <a href="/site/pojava-datetime-3.0.0/apidocs/">JavaDocs</a></td>
<td>POJava DateTime combines an intelligent date parser with date manipulation features such as advanced formatting,
simple time zone conversions, and date arithmetic.</td>
</tr>
<tr>
<td><a href="/site/pojava-persistence-2.6.0/">Persistence 2.6.0</a> <a href="/site/pojava-persistence-2.6.0/apidocs/">JavaDocs</a></td>
<td>POJava Persistence provides a persistence layer for Object Relational Mapping between Java
and a wide array of database platforms.  It also provides Object to XML serialization and
deserialization to simplify the conversion of your objects into a portable form.</td>
</tr>
</table>
<h2>Hand-written Documentation</h2>
<h3>How to use POJava for...</h3>
<table>
<tr>
  <td><a href="/howto/compression.html">Compression</a></td>
  <td>Using Zip compression to fit more into the same space.</td>
</tr><tr>
  <td><a href="/howto/datetime.html">Date and Time</a>
  <td>Easily parse freeform text Date and Time in multiple languages and formats.</td>
</tr><tr>
  <td><a href="/howto/encoding.html">Number Base Encoding</a>
  <td>Base-64 or Hex-encode your binary data for document portability.</td>
</tr><tr>
  <td><a href="/howto/jndiregistry.html">Unit testing with JNDI</a>
  <td>Use JNDIRegistry to populate a test-friendly InitialContext.</td>
</tr><tr>
  <td><a href="/howto/process.html">Running External Programs</a>
  <td>Use the ProcessTool to reliably execute external programs, capturing both stdout and stderr.</td>
</tr><tr>
  <td><a href="/howto/encryption.html">Encryption</a>
  <td>Encrypt and decrypt your data using government-approved AES-128 encryption (and other
supported encryption methods).</td>
</tr>
</table>
<table>
<h3>How to use POJava Persistence for...</h3>
<tr>
  <td><a href="/howto/xmlserializer.html">XML Serialization</a>
  <td>Stream your Objects to XML.  Retrieve and rehydrate them back into Objects, preserving
complex circular references.</td>
</tr><tr>
  <td><a href="/howto/dao.html">Object Relational Mapping</a>
  <td>Make your Data Access Objects simple, secure and speedy.</td>
</tr>
</table>
</body>
</html>
